home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C++ / Applications / PICSee Dust 1.01 / Quaternary Source / Class_ProgressBar.cpp < prev    next >
Text File  |  1995-11-15  |  4KB  |  158 lines

  1. /*
  2.     File: Class_ProgressBar.c++
  3.     
  4.     6/22/94
  5.     
  6.     Version History;
  7.         1.1    11/13/95
  8.             Changed increment methods; added IncrementBy() & IncrementTo()    
  9. */
  10.  
  11. #include "Class_ProgressBar.h"
  12. #include "TimerUtils.h"
  13.  
  14. // ---------------------------------------------------------------------------
  15.  
  16. ProgressBar::ProgressBar(Rect *theBounds, short max, short cur, GrafPtr owner) {
  17.     ownerPort = owner;
  18.     bkgndRect = fillRect = frameRect = *theBounds;
  19.     InsetRect(&bkgndRect, 1, 1);
  20.     InsetRect(&fillRect, 2, 2);
  21.     fillRect.right = fillRect.left;
  22.  
  23.     maxVal = max;
  24.     curVal = cur;
  25.     stepVal = 1;
  26.  
  27.     smoothProgress = true;
  28.  
  29.     useFillColor = useBkgndColor = setupYet = false;
  30.  
  31.         // Set to black
  32.     fillColor.red = fillColor.green = fillColor.blue = 
  33.     bkgndColor.red = bkgndColor.green = bkgndColor.blue = 0;
  34. } // END short ctor
  35.  
  36. // ---------------------------------------------------------------------------
  37.  
  38. ProgressBar::ProgressBar(Rect *theBounds, short max, short cur,
  39.     GrafPtr owner, RGBColor *fill, RGBColor *bkgnd) {
  40.  
  41.     ownerPort = owner;
  42.     bkgndRect = fillRect = frameRect = *theBounds;
  43.     InsetRect(&bkgndRect, 1, 1);
  44.     InsetRect(&fillRect, 2, 2);
  45.     fillRect.right = fillRect.left;
  46.  
  47.     maxVal = max;
  48.     curVal = cur;
  49.     stepVal = 1;
  50.  
  51.     smoothProgress = true;
  52.     setupYet = false;
  53.  
  54.     if (fill != nil) {
  55.         useFillColor = true;
  56.         fillColor = *fill;
  57.     }
  58.     else
  59.         useFillColor = false;
  60.  
  61.     if (bkgnd != nil) {
  62.         useBkgndColor = true;
  63.         bkgndColor = *bkgnd;
  64.     }
  65.     else
  66.         useBkgndColor = false;
  67. } // END long ctor
  68.  
  69. // ---------------------------------------------------------------------------
  70.  
  71. void ProgressBar::Update() {
  72.     Draw();
  73. } // END Update
  74.  
  75. // ---------------------------------------------------------------------------
  76.  
  77. void ProgressBar::Increment() {
  78.     if (curVal <= maxVal) {
  79.         curVal += stepVal;
  80.         Draw();
  81.     }
  82. } // END Increment
  83.  
  84. // ---------------------------------------------------------------------------
  85.  
  86. void ProgressBar::IncrementBy(short stepValue) {
  87.     if (curVal <= maxVal) {
  88.         curVal += stepValue;
  89.         Draw();
  90.     }
  91. } // END IncrementBy
  92.  
  93. // ---------------------------------------------------------------------------
  94.  
  95. void ProgressBar::IncrementTo(short newCurVal) {
  96.     if (curVal <= maxVal) {
  97.         curVal = newCurVal;
  98.         Draw();
  99.     }
  100. } // END IncrementTo
  101.  
  102. // ---------------------------------------------------------------------------
  103.     
  104. void ProgressBar::Draw() {
  105.     GrafPtr savePort;
  106.     PenState savePen;
  107.     RGBColor foreSave;
  108.     short rightBounds;
  109.  
  110.     //if (curVal > maxVal) return;    // We've finished already; exit.
  111.     if (curVal > maxVal)
  112.         curVal = maxVal;
  113.  
  114.     GetPort(&savePort);
  115.     SetPort(ownerPort);
  116.     GetPenState(&savePen);
  117.     if (useFillColor || useBkgndColor)
  118.         GetForeColor(&foreSave);
  119.     PenNormal();
  120.  
  121.     if (!setupYet) {
  122.         // We've just started, so do some setup...
  123.         FrameRect(&frameRect);
  124.         if (useBkgndColor) {
  125.             RGBForeColor(&bkgndColor);
  126.             PaintRect(&bkgndRect);
  127.         }
  128.         setupYet = true;
  129.     }
  130.  
  131.     float rightBoundsAdd = ((float)curVal/maxVal) * float(bkgndRect.right - bkgndRect.left - 2);
  132.     rightBounds = fillRect.left + rightBoundsAdd;
  133.  
  134.     if (smoothProgress) {
  135.         if (useFillColor)
  136.             RGBForeColor(&fillColor);
  137.         StartTimerFPS(200);
  138.         while (fillRect.right <= rightBounds) {
  139.             if (TimerDoNow()) {
  140.                 FillRect(&fillRect, (ConstPatternParam)&qd.black);
  141.                 fillRect.right++;
  142.                 ResetTimer();
  143.             }
  144.         }
  145.         StopTimer();
  146.     }
  147.     else {
  148.         fillRect.right = rightBounds;
  149.         if (useFillColor)
  150.             RGBForeColor(&fillColor);
  151.         PaintRect(&fillRect);
  152.     }
  153.     
  154.     SetPenState(&savePen);
  155.     if (useFillColor || useBkgndColor)
  156.         RGBForeColor(&foreSave);
  157.     SetPort(savePort);
  158. } // END Draw